import {defineStore} from 'pinia'
import { showNoneIconToast } from '../../utils/toast';

let recorderTimer = null;
const state = () => ({
	recorder: null,
	// 发送语音的函数
	sendVoice: null,
	// 记录开始录音的时间戳
	recordStartTime: 0,
	// 标记是否正在处理录音结束，防止重复触发
	isProcessingStop: false
})


const actions = {
	initRecorder() {
		// 创建录音管理器
		this.recorder = uni.getRecorderManager()
		this.recorder.onStart(() => {
			console.log("录音开始");
			// 记录开始时间
			this.recordStartTime = Date.now()
			this.isProcessingStop = false
			
			if(recorderTimer) {
				clearTimeout(recorderTimer)
			}
			// 规定录制音频的最大时长（60秒后自动停止）
			recorderTimer = setTimeout(() => {
				console.log("录音超时，自动停止");
				this.recorder.stop()
			}, 60 * 1000)
		})
		
		this.recorder.onStop((res) => {
			// 防止重复触发
			if (this.isProcessingStop) {
				console.log("录音停止回调被重复触发，忽略");
				return
			}
			this.isProcessingStop = true
			
			console.log("录音停止 - 原始回调数据:", JSON.stringify(res, null, 2));
			
			const {tempFilePath, duration, fileSize} = res
			
			// 清除定时器
			if(recorderTimer) {
				clearTimeout(recorderTimer)
				recorderTimer = null
			}
			
			// 计算实际录音时长（使用开始时间计算）
			let durationInSeconds = 0
			
			if (duration !== undefined && duration !== null) {
				// 平台返回了 duration，使用平台的值
				if (duration > 1000) {
					durationInSeconds = Math.round(duration / 1000)
					console.log(`使用平台返回的时长: ${duration}ms -> ${durationInSeconds}秒`);
				} else {
					durationInSeconds = Math.round(duration)
					console.log(`使用平台返回的时长: ${duration}秒`);
				}
			} else {
				// 平台没有返回 duration，使用计时器计算
				if (this.recordStartTime > 0) {
					const elapsed = Date.now() - this.recordStartTime
					durationInSeconds = Math.round(elapsed / 1000)
					console.log(`平台未返回时长，使用计时器计算: ${elapsed}ms -> ${durationInSeconds}秒`);
				} else {
					console.warn("警告：无法计算录音时长，使用默认值 1 秒");
					durationInSeconds = 1
				}
			}
			
			console.log("最终录音时长:", durationInSeconds, "秒");
			console.log("临时文件路径:", tempFilePath);
			console.log("文件大小:", fileSize || '未知', "字节");
			
			// 重置开始时间
			this.recordStartTime = 0
			
			if(durationInSeconds < 1) {
				showNoneIconToast("录音时间不能小于1秒")
				// 重置标记，允许下次录音
				setTimeout(() => {
					this.isProcessingStop = false
				}, 500)
			} else if(durationInSeconds >= 60) {
				showNoneIconToast("录音时长不能超过60秒")
				// 即使超过60秒，也可以发送（已被自动截断）
				if(this.sendVoice) {
					this.sendVoice({
						tempFilePath,
						duration: 60
					})
				}
				// 重置标记
				setTimeout(() => {
					this.isProcessingStop = false
				}, 500)
			} else {
				// 正常发送录音
				if(this.sendVoice) {
					this.sendVoice({
						tempFilePath,
						duration: durationInSeconds
					})
				}
				// 重置标记
				setTimeout(() => {
					this.isProcessingStop = false
				}, 500)
			}
		})
		
	// 监听录音错误
	this.recorder.onError((err) => {
		console.error("录音错误:", err);
		showNoneIconToast("录音失败，请重试")
		if(recorderTimer) {
			clearTimeout(recorderTimer)
			recorderTimer = null
		}
		// 重置状态
		this.recordStartTime = 0
		this.isProcessingStop = false
	})
	},
	registerSendVoiceEvent(sendVoiceFn) {
		this.sendVoice = sendVoiceFn
	},
	
}


export const useChatStore = defineStore('chat',{
	state,
	actions,
	persist:true
})